// main.go
package main

import (
	"log"
	"mygin/api/routes"
	"mygin/config"
	"os"

	_ "mygin/docs" // 这是自动生成的docs包，确保路径正确

	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"     // 添加包别名
	ginSwagger "github.com/swaggo/gin-swagger" // 添加包别名
)

// setupSwagger 根据环境配置Swagger路由
func setupSwagger(r *gin.Engine, isProduction bool) {
	if !isProduction {
		// 注册Swagger路由
		r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	}
}

func main() {

	// 加载配置
	if err := config.Load(); err != nil {
		log.Fatalf("Failed to load config: %v", err)
	}

	// 初始化数据库
	if err := config.InitDB(); err != nil {
		log.Fatalf("Failed to initialize database: %v", err)
	}

	// 创建Gin引擎
	r := gin.Default()

	// 判断当前环境
	isProd := os.Getenv("APP_ENV") == "production"

	// 配置Swagger
	setupSwagger(r, isProd)

	// 注册Swagger路由
	//r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	// 注册路由
	//apiGroup := r.Group("/api")
	routes.RegisterRoutes(r, config.DB)

	// 启动服务
	r.Run(config.AppConfig.Server.Address)
}

// api/handlers: 处理 HTTP 请求
// api/middleware: 中间件
// api/routes: 路由定义
// config: 配置文件
// internal/models: 数据模型
// internal/repositories: 数据库操作
// internal/services: 业务逻辑
// pkg: 可复用的公共代码
// tests: 测试代码
